package com.aiolos.wxdc.dataobject.mapper;

import com.aiolos.wxdc.dataobject.ProductCategory;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * MyBatis的注解方式实现增删改查
 */
public interface ProductCategoryMapper {

    /**
     * 使用map方式插入数据
     * values中的categoryName、categoryType完全对应map中的key
     * @param map
     * @return
     */
    @Insert("insert into product_category(category_name,category_type) " +
            "values (#{categoryName,jdbcType=VARCHAR},#{categoryType,jdbcType=INTEGER})")
    int insertByMap(Map<String,Object> map);

    /**
     * 对象方式插入数据（使用更多）
     * values中的categoryName、categoryType完全对应对象中的属性名
     * @param productCategory
     * @return
     */
    @Insert("insert into product_category(category_name,category_type) " +
            "values (#{categoryName,jdbcType=VARCHAR},#{categoryType,jdbcType=INTEGER})")
    int insertByObject(ProductCategory productCategory);

    /**
     * 根据CategoryType查询,最多只会返回一条记录
     * 查询结果需要使用@Results声明,其中每个@Result用于声明数据表字段对应的对象属性
     * @return
     */
    @Select("select * from product_category where category_type = #{categoryType}")
    @Results({
            @Result(column = "category_type",property = "categoryType"),
            @Result(column = "category_name",property = "categoryName")
    })
    ProductCategory findByCategoryType(Integer categoryType);

    /**
     * 根据CategoryName查询,可能会返回多条记录
     * @param categoryName
     * @return
     */
    @Select("select * from product_category where category_name like #{categoryName}")
    @Results({
            @Result(column = "category_type",property = "categoryType"),
            @Result(column = "category_name",property = "categoryName")
    })
    List<ProductCategory> findByCategoryName(String categoryName);


    /**
     * 根据字段更新
     * 更新时传多个参数，必须使用@Param注解
     * @param categoryName
     * @param categoryType
     * @return
     */
    @Update("update product_category set category_name = #{categoryName} where category_type = #{categoryType}")
    int updateByCategoryType(@Param("categoryName") String categoryName,@Param("categoryType") Integer categoryType);


    /**
     * 根据对象更新
     * @param productCategory
     * @return
     */
    @Update("update product_category set category_name = #{categoryName} where category_type = #{categoryType}")
    int updateByObject(ProductCategory productCategory);

    /**
     * 删除数据
     * @param categoryType
     * @return
     */
    @Delete("delete from product_category where category_type = #{categoryType} ")
    int deleteByCategoryType(Integer categoryType);

    /**
     * 使用MyBatis的xml方式
     * @param categoryType
     * @return
     */
    ProductCategory selectByCategoryType(Integer categoryType);

}
